package com.ytf.test.ninth;

interface Game {
    boolean move();
}

interface GameFactory {
    Game getGame();
}

class Checkers implements Game {
    private int mobes = 0;
    private static final int MOVES = 3;

    @Override
    public boolean move() {
        System.out.println("Checkers move " + mobes);
        return ++mobes != MOVES;
    }
}

class CheckersFactory implements GameFactory {

    @Override
    public Game getGame() {
        return new Checkers();
    }
}
class Chess implements Game {
    private int mobes = 0;
    private static final int MOVES = 4;

    @Override
    public boolean move() {
        System.out.println("Chess move " + mobes);
        return ++mobes != MOVES;
    }
}

class ChessFactory implements GameFactory {

    @Override
    public Game getGame() {
        return new Chess();
    }
}

/**
 * @author: YTF
 * @date: 2025/2/2 17:23
 * @version: 1.0
 * @description:
 */
public class Games {
    public static void playGame(GameFactory gameFactory){
        Game game = gameFactory.getGame();
        while (game.move()){

        }
    }
    public static void main(String[] args) {
        playGame(new CheckersFactory());
        playGame(new ChessFactory());
        /**
         * OutPut:
         * Checkers move 0
         * Checkers move 1
         * Checkers move 2
         * Chess move 0
         * Chess move 1
         * Chess move 2
         * Chess move 3
         */
    }
}
